package com.design.working.service;

import com.design.working.dto.counselor.CounselorHandleStudentApplicationDTO;
import com.design.working.dto.PageControlDTO;
import com.design.working.dto.counselor.SearchCounselorStudentAttendanceDTO;
import com.design.working.vo.*;
import com.design.working.vo.admin.StudentApplicationDetailVO;
import com.design.working.vo.admin.StudentApplicationExaminationVO;
import com.design.working.vo.admin.StudentMsgVO;
import com.design.working.vo.counselor.CounselorCollegeStudentInfoVO;
import com.design.working.vo.counselor.CounselorHandleStudentWorkApplicationVO;
import com.design.working.vo.counselor.CounselorSelectStudentApplicationVO;
import com.design.working.vo.counselor.CounselorStudentAttendanceRecordVO;
import com.design.working.vo.student.JobSelectionVO;

import java.util.List;

public interface CounselorService {

    /**
     * 查找本院未审批的学生岗位申请记录
     *
     * @param uid            辅导员工号
     * @param pageControlDTO 分页信息
     * @return 查询到的本院未审批的学生岗位申请记录
     */
    ResponseVO<List<CounselorHandleStudentWorkApplicationVO>> selectStudentWorkApplication(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 审批学生的岗位申请
     *
     * @param uid 辅导员工号
     * @param counselorCheckApplicationDTO 辅导员对学生申请记录的审批内容
     */
    void insertStudentApplicationHanding(Integer uid, CounselorHandleStudentApplicationDTO counselorCheckApplicationDTO);

    /**
     * 查找申请表中学生申请工作填写的个人信息
     *
     * @param smtId 学生申请工作表中对应的个人信息记录id
     * @return 学生申请工作填写的个人信息
     */
    ResponseVO<StudentApplicationDetailVO> selectStudentApplicationDetail(Integer smtId);

    /**
     * （申请岗位）查找全部岗位
     *
     * @param place          需要查询的岗位所属的行政分类
     * @param pageControlDTO 分页信息
     * @return 查询到的岗位
     */
    ResponseVO<List<JobSelectionVO>> selectJob(String place, PageControlDTO pageControlDTO);

    /**
     * 查找本院学生信息
     *
     * @param uid            辅导员工号
     * @param pageControlDTO 分页信息
     * @return 查询到的本院学生信息
     */
    ResponseVO<List<CounselorCollegeStudentInfoVO>> selectStudentInfo(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 通过学号姓名查找本院学生信息
     *
     * @param uid            辅导员工号
     * @param pageControlDTO 分页信息
     * @param stuUid         学生学号
     * @param studentName    学生姓名
     * @return 查询到的本院学生信息
     */
    ResponseVO<List<CounselorCollegeStudentInfoVO>> selectStudentInfoByName(Integer uid, PageControlDTO pageControlDTO, String stuUid, String studentName);

    /**
     * 查询学生详细信息
     *
     * @param uid 学生学号
     * @return 学生个人详细信息
     */
    ResponseVO<StudentMsgVO> selectStudentMsg(Integer uid);

    /**
     * 查询本院学生考勤记录
     *
     * @param uid            辅导员工号
     * @param pageControlDTO 分页信息
     * @return 学生考勤记录
     */
    ResponseVO<List<CounselorStudentAttendanceRecordVO>> selectCollegeStudentAttendance(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 通过学号姓名查询本院学生考勤记录
     *
     * @param uid            辅导员工号
     * @param pageControlDTO 分页信息
     * @param searchDTO      搜索的信息
     * @return 学生考勤记录
     */
    ResponseVO<List<CounselorStudentAttendanceRecordVO>> selectCollegeStudentAttendanceByLimit(Integer uid, PageControlDTO pageControlDTO, SearchCounselorStudentAttendanceDTO searchDTO);

    /**
     * 查询本院学生申请岗位的信息
     * @param uid            辅导员工号
     * @param pageControlDTO 分页信息
     * @return 学生申请岗位的信息
     */
    ResponseVO<List<CounselorSelectStudentApplicationVO>> selectStudentApplication(Integer uid, PageControlDTO pageControlDTO);

    /**
     * 通过学号姓名查询本院学生申请岗位的信息
     * @param uid            辅导员工号
     * @param pageControlDTO 分页信息
     * @param stuUid         学生学号
     * @param studentName    学生姓名
     * @return 学生申请岗位的信息
     */
    ResponseVO<List<CounselorSelectStudentApplicationVO>> selectStudentApplicationByName(Integer uid, PageControlDTO pageControlDTO, String stuUid, String studentName);

    /**
     * 查询学生岗位申请的记录
     * @param swaId 学生岗位申请表id
     * @return 学生岗位申请审批记录
     */
    ResponseVO<StudentApplicationExaminationVO> selectStuAppExamination(Integer swaId);
}
